package com.samxcode.leetcode;

/**
 * The count-and-say sequence is the sequence of integers beginning as follows: 1, 11, 21, 1211,
 * 111221, ...
 * 
 * 1 is read off as "one 1" or 11. 11 is read off as "two 1s" or 21. 21 is read off as
 * "one 2, then one 1" or 1211. Given an integer n, generate the nth sequence.
 * 
 * Note: The sequence of integers will be represented as a string.
 * 
 * @author Sam
 *
 */
public class CountAndSay {
    
    public static void main(String[] args) {
        System.out.println(countAndSay(2));
    }

    public static String countAndSay(int n) {
        if (n == 1) {
            return "1";
        }
        StringBuilder pre, say= new StringBuilder("1");
        int count;
        char c, nc;
        for (int i = 1; i < n; i++) {
            pre = say;
            say = new StringBuilder();
            c = pre.charAt(0);
            count = 1;
            for (int j = 1; j < pre.length(); j++) {
                nc = pre.charAt(j);
                if (c != nc) {
                    say.append(count).append(c);
                    c = nc;
                    count = 1;
                } else {
                    count++;
                }
            }
            say.append(count).append(c);
        }
        return say.toString();
    }
}
